<?php

namespace app\common\library;

use think\facade\Cache;

/**
 * 测量指标类
 * Class Measurement
 * @package app\common\library
 */
class Measurement
{
    // 刷新时延信息
    const RGSRefreshTime = 'RGSRefreshTime'; // 游戏状态进行一次完整刷新需要的时间
    const RRIRefreshTime = 'RRIRefreshTime'; // 房间信息进行一次完整刷新需要的时间
    const RLSRefreshTime = 'RLSRefreshTime'; // 直播状态进行一次完整刷新需要的时间

    // 末次扫描时间
    const RGSScanTime = 'RGSScanTime'; // 游戏状态扫描时间
    const RRIScanTime = 'RRIScanTime'; // 房间信息扫描时间
    const RLSScanTime = 'RLSScanTime'; // 直播状态扫描时间

    // 共计扫描轮次
    const RGSScanCount = 'RGSScanCount'; // 游戏状态扫描轮次
    const RRIScanCount = 'RRIScanCount'; // 房间信息扫描轮次
    const RLSScanCount = 'RLSScanCount'; // 直播状态扫描轮次

    // 当前已执行的Chunk数
    const RGSChunkCount = 'RGSChunkCount';
    const RRIChunkCount = 'RRIChunkCount';
    const RLSChunkCount = 'RLSChunkCount';

    // 末次执行房间发现的时间
    const RoomScanTime = 'RoomScanTime';

    /**
     * 获取枚举描述信息
     * @return int[]
     */
    public static function data(): array
    {
        return [
            self::RGSRefreshTime => [
                'key'  => self::RGSRefreshTime,
                'name' => '游戏状态刷新延迟',
                'desc' => '游戏状态进行一轮完整采集刷新需要的时间'
            ],
            self::RRIRefreshTime => [
                'key'  => self::RRIRefreshTime,
                'name' => '房间信息刷新延迟',
                'desc' => '房间信息进行一轮完整采集刷新需要的时间'
            ],
            self::RLSRefreshTime => [
                'key'  => self::RLSRefreshTime,
                'name' => '直播状态刷新延迟',
                'desc' => '直播状态进行一轮完整采集刷新需要的时间'
            ],
            self::RGSScanTime    => [
                'key'  => self::RGSScanTime,
                'name' => '游戏状态扫描时间',
                'desc' => '最后一次执行游戏状态扫描的时间'
            ],
            self::RRIScanTime    => [
                'key'  => self::RRIScanTime,
                'name' => '房间信息扫描时间',
                'desc' => '最后一次执行房间信息扫描的时间'
            ],
            self::RLSScanTime    => [
                'key'  => self::RLSScanTime,
                'name' => '直播状态扫描时间',
                'desc' => '最后一次执行直播状态扫描的时间'
            ],
            self::RoomScanTime   => [
                'key'  => self::RoomScanTime,
                'name' => '在玩列表扫描时间',
                'desc' => '最后一次执行在玩列表扫描的时间'
            ],
            self::RGSScanCount   => [
                'key'  => self::RGSScanCount,
                'name' => '游戏状态扫描轮次',
                'desc' => '游戏状态已成功进行多少轮扫描'
            ],
            self::RRIScanCount   => [
                'key'  => self::RRIScanCount,
                'name' => '房间信息扫描轮次',
                'desc' => '房间信息已成功进行多少轮扫描'
            ],
            self::RLSScanCount   => [
                'key'  => self::RLSScanCount,
                'name' => '直播状态扫描轮次',
                'desc' => '直播状态已成功进行多少轮扫描'
            ],
            self::RGSChunkCount  => [
                'key'  => self::RGSChunkCount,
                'name' => '游戏状态执行数',
                'desc' => '游戏状态分段扫描已执行数量'
            ],
            self::RRIChunkCount  => [
                'key'  => self::RRIChunkCount,
                'name' => '房间信息执行数',
                'desc' => '房间信息分段扫描已执行数量'
            ],
            self::RLSChunkCount  => [
                'key'  => self::RLSChunkCount,
                'name' => '直播状态执行数',
                'desc' => '直播状态分段扫描已执行数量'
            ],
        ];
    }

    /**
     * 获取所有遥测指标
     * @return array
     */
    public static function all(): array
    {
        $data = self::data();
        foreach ($data as $key => $item) {
            $data[$key]['value'] = Cache::get($key);
        }
        return $data;
    }
}
